//
//  KooCalendarHeader.h
//  KooIEDUCalendarDemo
//
//  Created by nowcoder on 2024.
//

#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN

@class KooCalendarConfig;

/**
 * 日历月份头部视图
 */
@interface KooCalendarHeader : UIView

// MARK: - Properties
/** 月份标题标签 */
@property (nonatomic, strong, readonly) UILabel *titleLabel;

/** 左箭头按钮 */
@property (nonatomic, strong, readonly) UIButton *leftArrowButton;

/** 右箭头按钮 */
@property (nonatomic, strong, readonly) UIButton *rightArrowButton;

/** 当前显示的日期 */
@property (nonatomic, strong) NSDate *currentDate;

/** 配置对象 */
@property (nonatomic, strong) KooCalendarConfig *config;

/** 是否显示导航箭头，默认为NO */
@property (nonatomic, assign) BOOL showNavigationArrows;

// MARK: - Callbacks
/** 左箭头点击回调 */
@property (nonatomic, copy, nullable) void(^leftArrowClickBlock)(void);

/** 右箭头点击回调 */
@property (nonatomic, copy, nullable) void(^rightArrowClickBlock)(void);

/** 月份标题点击回调 */
@property (nonatomic, copy, nullable) void(^titleClickBlock)(void);

// MARK: - Initialization
/**
 * 使用配置初始化头部视图
 * @param config 配置对象
 */
- (instancetype)initWithConfig:(KooCalendarConfig *)config;

// MARK: - Public Methods
/**
 * 更新显示的月份
 * @param date 新的月份日期
 */
- (void)updateCurrentDate:(NSDate *)date;

/**
 * 更新头部视图的样式
 * @param config 新的配置对象
 */
- (void)updateWithConfig:(KooCalendarConfig *)config;

/**
 * 设置月份标题文本
 * @param title 标题文本
 */
- (void)setTitleText:(NSString *)title;

/**
 * 设置导航箭头的显示状态
 * @param show 是否显示
 * @param animated 是否使用动画
 */
- (void)setShowNavigationArrows:(BOOL)show animated:(BOOL)animated;

// MARK: - Override Points
/**
 * 子类可重写此方法自定义UI创建
 */
- (void)setupUI;

/**
 * 子类可重写此方法自定义约束设置
 */
- (void)setupConstraints;

/**
 * 子类可重写此方法自定义样式更新
 */
- (void)updateAppearance;

// MARK: - Private Methods
/**
 * 格式化日期为显示文本
 * @param date 要格式化的日期
 * @return 格式化后的文本
 */
- (NSString *)formatDateForDisplay:(NSDate *)date;

@end

NS_ASSUME_NONNULL_END 